home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / ippon / source.lzh / enemy.h < prev    next >
C/C++ Source or Header  |  2000-07-07  |  4KB  |  140 lines

  1. /* enemy.h */
  2.  
  3. #ifndef SHORT_LX
  4. /* signed int の座標値から固定小数部(上位16bit)を取り出すマクロ */
  5. #define SHORT_LX (*((short *) (&p->lx)))
  6. #define SHORT_LY (*((short *) (&p->ly)))
  7. #define SHORT_VX (*((short *) (&p->vx)))
  8. #define SHORT_VY (*((short *) (&p->vy)))
  9. #endif
  10.  
  11.  
  12. typedef struct _enemy {
  13.     signed short x, y;    /* 座標 */
  14.     short pt;        /* スプライトパターンNo. */
  15.     short info;        /* 反転コード・色・優先度を表わすデータ */
  16.     short type;        /* 種類 */
  17.     signed int lx, ly;    /* 32bit X,Y 座標 ( l = longword ) */
  18.     signed int vx, vy;    /* 速度 */
  19.     signed short hit_sx, hit_sy;    /* 自機ショットに対する当たり判定の大きさ */
  20.     signed short hp;    /* 耐久力( <= 0 で破壊) */
  21.     signed short damage;    /* 今回受けたダメージ */
  22.     char damage_mode;    /* 貫通するかしないか */
  23.     char flash;        /* 残り hp が少なくてフラッシュするカウンター */
  24.     unsigned char angle;    /* 角度 (0~255) */
  25.     short shot_count;    /* (当たったショット)が刺さった回数 */
  26.     int timer;        /* タイマー */
  27.  
  28.     short (*func_enemy_move) (struct _enemy *);    /* 移動関数へのポインタ */
  29.     void (*func_enemy_free) (struct _enemy *);    /* 終了関数へのポインタ */
  30.  
  31.     short m_work;        /* 移動用ワーク */
  32.     short m_work2;
  33.     short m_work3;
  34.     short m_work4;
  35.     short m_work5;
  36.     short m_work6;
  37.  
  38.     short s_work;        /* ショット用ワーク */
  39.     short s_work2;
  40.     short s_work3;
  41.     short s_work4;
  42.  
  43.     unsigned char s_angle;    /* ショットの角度 (0~255) */
  44.     unsigned char s_angle2;
  45.     unsigned char s_angle3;
  46.     unsigned char s_angle4;
  47.  
  48.     /* 移動用ワーク(SubMoveTo() 用) */
  49.     signed int move_ax, move_ay;    /* 加速度 */
  50.     unsigned short move_seq;    /* 加速中、等速度運動中、減速中 */
  51.     signed short move_count;    /* 加速度を何回足すか */
  52.     signed short move_count2;    /* 一定速度で進む回数 */
  53.     signed short move_count3;    /* 実際に加速した回数 */
  54.     signed short move_counter;    /* 何回足すか数える */
  55.  
  56.  
  57.     /* コア関係のワーク */
  58.     signed short core_x, core_y;    /* コア座標 */
  59.     short core_pt;        /* スプライトパターンNo. */
  60.     short core_info;    /* 反転コード・色・優先度を表わすデータ */
  61.  
  62.     struct _shot *shot;    /* 当たったショットのワーク */
  63.     struct _enemy *next;    /* 次の構造体へのポインタ */
  64. } ENEMY;
  65.  
  66.  
  67. /* damage_mode の値 */
  68. enum {
  69.     DAMAGE_THROUGH = 0,    /* ショットは貫通する */
  70.     DAMAGE_PIERCE,        /* ショットは刺さる */
  71. };
  72.  
  73. /* 耐久力がこれ以下なら赤フラッシュ */
  74. #define HP_PALET_RED    10
  75.  
  76. /* 敵キャラ点滅(ダメージを受けた、体力が少ない)時のタイマー用定数 */
  77. #define TIMER_FLASH_RED        10    /* タイマーがこれ以上なら赤フラッシュ */
  78. #define TIMER_FLASH_DAMAGE    14    /* ダメージを受けたらタイマーをこの値に */
  79. #define TIMER_FLASH_NORMAL    15    /* これを越えたらタイマーを0に */
  80.  
  81.  
  82. enum {
  83.     ENEMY_ZAKOA = 0,
  84.     ENEMY_ZAKOB,
  85.     ENEMY_COVERN,
  86.     ENEMY_OPLASER,
  87.     ENEMY_ROUND4,
  88.     ENEMY_COVERF,
  89.     ENEMY_SWORD,
  90.     ENEMY_SEARCHZ,
  91.     ENEMY_SEARCHZ2,
  92.     ENEMY_ZAKO031,
  93.     ENEMY_LBOSS01,
  94.     ENEMY_LBOSS01C,
  95. };
  96.  
  97.  
  98.  
  99. #ifdef GLOBAL_DEFINE        /* グローバル変数の定義と宣言を1つにまとめるテク */
  100. #define Extern            /* Extern をヌル文字列に置換 */
  101. #else
  102. #define Extern extern        /* Extern を extern に置換 */
  103. #endif
  104.  
  105.  
  106. /* グローバル変数 */
  107. Extern short obj_zako02, obj_covern, obj_oplaser, obj_round4, obj_coverf, obj_sword, obj_searchz,
  108.   obj_zako03, obj_lboss01;
  109.  
  110. #ifdef DEBUG
  111. Extern short enemy_sum;        /* 敵の数 */
  112. #endif
  113.  
  114.  
  115. /* 関数プロトタイプ宣言 */
  116. void EnemyInit (void);
  117. ENEMY *EnemyAlloc (short, signed short, signed short);
  118. void EnemyMove (void);
  119.  
  120. /* サービスルーチン */
  121. void SubEnemyMoveToInit (ENEMY *, signed short, signed short,
  122.              unsigned char, signed short);
  123. short SubEnemyMoveTo (ENEMY *);
  124. short SubEnemyMoveToAbort (ENEMY *);
  125.  
  126.  
  127. /* 関数プロトタイプ宣言(FuneEnemy/ 以下) */
  128. void EnemyAllocZakoA (ENEMY *);
  129. void EnemyAllocZakoB (ENEMY *);
  130. void EnemyAllocCoverN (ENEMY *);
  131. void EnemyAllocOplaser (ENEMY *);
  132. void EnemyAllocRound4 (ENEMY *);
  133. void EnemyAllocCoverF (ENEMY *);
  134. void EnemyAllocSword (ENEMY *);
  135. void EnemyAllocSearchZ (ENEMY *);
  136. void EnemyAllocSearchZ2 (ENEMY *);
  137. void EnemyAllocZako031 (ENEMY *);
  138. void EnemyAllocLBoss01 (ENEMY *);
  139. void EnemyAllocLBoss01C (ENEMY *);
  140.